export default {
	"连击算法": (fight_data, src_unit, target_unit, skill_name) => {
		console.debug(`连击算法 : ${skill_name}`);
		if (src_unit["理直气壮"]) {
			console.debug(`连击算法 ${skill_name} => 理直气壮`);
			if (target_unit && G.RandomUtils.chance(40)) {
				src_unit["指令"]["参数"] = "理直气壮";
				// 物攻技能计算
				G.FightADSkillUtils.computing_ad_skill(fight_data, src_unit, "理直气壮", 0)
				if (src_unit["苍鸾怒击"] && src_unit["苍鸾怒击"] === 1) {
					src_unit["苍鸾怒击"] = 2;
					let new_target_unit = G.FightUtils.get_ry_skill_target(fight_data, src_unit);
					if (new_target_unit) {
						src_unit["指令"]["目标"] = new_target_unit["编号"];
						// 普通攻击计算
						G.FightNormalAttackUtils.computing_normal_attack(fight_data, src_unit, 1.1);
						// 添加状态
						G.FightStatusUtils.add_unit_status(fight_data, src_unit, src_unit, "苍鸾怒击", 11);
					}
				}
				return true;
			}
		} else {
			let lj_gl = src_unit["连击"]
			if (src_unit["法术状态"]["干将莫邪"] && src_unit["法术状态"]["干将莫邪"]["物连几率"]) {
				lj_gl = lj_gl + 40;
			}
			if (src_unit["大快朵颐"] && src_unit["附加必杀几率"] > 0) {
				lj_gl = lj_gl + 20;
			}
			if (target_unit && target_unit["反震"] === undefined && G.RandomUtils.chance(lj_gl)) {
				src_unit["指令"]["参数"] = skill_name;
				//物攻技能计算
				G.FightADSkillUtils.computing_ad_skill(fight_data, src_unit, skill_name, 0)
				if (src_unit["苍鸾怒击"] && src_unit["苍鸾怒击"] === 1) {
					clnj(fight_data, src_unit);
				}
				return true;
			}
		}
		return false;
	},
	"普通攻击": (fight_data, src_unit) => {
		let execute = G.FightNormalAttackUtils.computing_normal_attack(fight_data, src_unit, 1);
		if (execute && src_unit["苍鸾怒击"] && src_unit["苍鸾怒击"] === 1) {
			clnj(fight_data, src_unit);
		}
	},
	"唧唧歪歪": (fight_data, src_unit, target_list, target_index, damage) => {
		damage = damage * get_ll_damage(fight_data, src_unit, target_list[0]);
		let skill_level = G.FightUnitUtils.get_unit_skill_level(src_unit, "唧唧歪歪");
		let fl = get_fl_ratio("化生寺", target_list.length, skill_level);
		if (src_unit["福泽天下"]) {
			damage += src_unit["福泽天下"];
		}
		if (G.FightUnitUtils.check_fight_unit_jingmai(src_unit, "化生寺", "销武")) {
			src_unit["销武"] = 1;
			damage = damage * (0.5 + (src_unit["等级"] * 0.08 / 100));
		}
		return [Math.floor(damage)];
	},

	"无心插柳": (fight_data, src_unit, target_unit, damage) => {
		if (G.FightUnitUtils.check_fight_unit_jingmai(src_unit, "大唐官府", "风刃") && !src_unit["溅射"]) {
			let target_count = 2;
			if (src_unit["指令"]["附加"] === "友伤") {
				target_count = 0;
			}
			let js_unit_list = G.FightUtils.get_jian_she_group(fight_data, src_unit, target_unit, target_count + 2);
			let fh_damage = 0;
			if (src_unit["法术状态"]["风魂"]) {
				fh_damage = 1000;
				G.FightStatusUtils.canel_unit_status(fight_data, "风魂", src_unit);
			}
			for (let index = 0; index < js_unit_list.length; index++) {
				let js_unit = js_unit_list[index];
				target_count -= 1;
				G.FightComputingUtils.remove_hp_js_and_play(fight_data, src_unit, js_unit, src_unit["等级"] * 3 + fh_damage);
			}
			return;
		}
		if (src_unit["溅射"] && src_unit["无心插柳"] === false) {
			let ext_damage = 0;
			let fh_damage = 0;
			let ext_target_count = 0;
			if (G.FightUnitUtils.check_fight_unit_jingmai(src_unit, "大唐官府", "风刃")) {
				ext_target_count = 2;
				if (src_unit["法术状态"]["风魂"]) {
					fh_damage = 1000;
					G.FightStatusUtils.canel_unit_status(fight_data, "风魂", src_unit);
				}
				ext_damage = src_unit["等级"] * 3;
				ext_damage += fh_damage;
			}
			src_unit["无心插柳"] = true;
			let target_count = 2;
			let js_damage = 1;
			let js_unit_list = G.FightUtils.get_jian_she_group(fight_data, src_unit, target_unit, target_count + 1 + ext_target_count);
			if (src_unit["指令"]["附加"] === "友伤") {
				js_unit_list = G.FightUtils.get_jian_she_group(fight_data, src_unit, target_unit, target_count);
				let damaget = G.FightPhysicalAttack.get_ad_damage(src_unit, target_unit);
				let final_damage = G.FightPhysicalAttack.get_final_ad_damage(src_unit, target_unit, damaget, false);
				js_damage = Math.floor(final_damage["伤害"] * src_unit["溅射"]);
			}
			for (let index = 0; index < js_unit_list.length; index++) {
				let js_unit = js_unit_list[index];
				if (js_unit["编号"] !== target_unit["编号"] && ext_target_count !== 0 &&
					fight_data["战斗流程"][fight_data["战斗流程"].length - 1]["挨打方"] &&
					fight_data["战斗流程"][fight_data["战斗流程"].length - 1]["挨打方"][0] &&
					fight_data["战斗流程"][fight_data["战斗流程"].length - 1]["挨打方"][0]["伤害"]) {
					if (src_unit["指令"]["附加"] === "友伤") {
						G.FightComputingUtils.remove_hp_js_and_play(fight_data, src_unit, js_unit, js_damage);
					} else {
						let damage = Math.floor(fight_data["战斗流程"][fight_data["战斗流程"].length - 1]["挨打方"][0]["伤害"] * src_unit["溅射"]) + ext_damage;
						G.FightComputingUtils.remove_hp_js_and_play(fight_data, src_unit, js_unit, damage);
					}
				}
			}
		}
	},
	"嗜血幡": (fight_data, src_unit, target_unit) => {
		if (G.FightUnitUtils.check_unit_fa_bao(fight_data, src_unit, "嗜血幡")
			&& G.FightUnitUtils.get_unit_process_status(fight_data, src_unit)
			&& G.FightUnitUtils.get_target_unit_status(src_unit, target_unit, 1)) {
			target_unit = G.FightUtils.get_ry_skill_target(src_unit, target_unit)

			// 普通攻击
			if (target_unit !== 0) {
				src_unit["指令"]["目标"] = target_unit["编号"];
				if (src_unit["追加法术"].length > 0 && G.RandomUtils.chance(src_unit["套装追加概率"])) {
					src_unit["嗜血幡"] = true;
					G.FightNormalAttackUtils.computing_normal_attack(src_unit, 0.5);
				}
				if (src_unit["嗜血幡"]) {
					src_unit["指令"]["类型"] = "法术";
					src_unit["指令"]["参数"] = src_unit["追加法术"][0]["名称"];
					G.FightAPSkillUtils.computing_ap_skill(fight_data, src_unit, target_unit, src_unit["追加法术"][0]["名称"]);

				}
			}
			// 溅射伤害
			if (G.FightUnitUtils.check_fight_unit_jingmai(src_unit, "大唐官府", "风刃")) {
				let target_count = 3;
				if (src_unit["指令"]["附加"] === "友伤") {
					target_count = 2;
				}
				let js_unit_list = G.FightUtils.get_jian_she_group(fight_data, src_unit, target_unit, target_count);
				let fh_damage = 0;
				if (src_unit["法术状态"]["风魂"]) {
					fh_damage = 1000;
					G.FightStatusUtils.canel_unit_status(fight_data, "风魂", src_unit);
				}
				for (let index = 0; index < js_unit_list.length; index++) {
					let js_unit = js_unit_list[index];
					if (js_unit["编号"] !== target_unit["编号"]) {
						G.FightComputingUtils.remove_hp_js_and_play(fight_data, src_unit, js_unit, src_unit["等级"] * 3 + fh_damage);
					}
				}
			}
		}

		if (G.FightUnitUtils.check_unit_fa_bao(fight_data, src_unit, "嗜血幡") &&
			G.FightUnitUtils.get_unit_process_status(fight_data, src_unit) &&
			G.FightUnitUtils.get_target_unit_status(src_unit, target_unit, 1)) {
			target_unit = G.FightUtils.get_ry_skill_target(src_unit, target_unit);
			if (target_unit !== 0) {
				src_unit["指令"]["目标"] = target_unit["编号"];
				if (src_unit["追加法术"].length > 0 && G.RandomUtils.chance(src_unit["套装追加概率"])) {
					src_unit["嗜血幡"] = true;
				} else {
					src_unit["嗜血幡"] = undefined;
				}
				G.FightNormalAttackUtils.computing_normal_attack(src_unit, 0.5)
				if (src_unit["嗜血幡"]) {
					src_unit["指令"]["类型"] = "法术";
					src_unit["指令"]["参数"] = src_unit["追加法术"][0]["名称"];
					G.FightAPSkillUtils.computing_ap_skill(fight_data, src_unit, target_unit, src_unit["追加法术"][0]["名称"]);
				}
			}
			if (G.FightUnitUtils.check_fight_unit_jingmai(src_unit, "大唐官府", "风刃")) {
				let target_count = 3
				if (src_unit["指令"]["附加"] === "友伤") {
					target_count = 2
				}
				let js_unit_list = G.FightUtils.get_jian_she_group(fight_data, src_unit, target_unit, target_count + 1);
				let fh_damage = 0;
				if (src_unit["法术状态"]["风魂"]) {
					fh_damage = 1000;
					G.FightStatusUtils.canel_unit_status(fight_data, "风魂", src_unit);
				}
				for (let index = 0; index < js_unit_list.length; index++) {
					let js_unit = js_unit_list[index];
					if (js_unit["编号"] !== target_unit["编号"]) {
						G.FightComputingUtils.remove_hp_js_and_play(fight_data, src_unit, js_unit, src_unit["等级"] * 3 + fh_damage);
					}
				}
			}
			src_unit["嗜血幡"] = undefined;
		}
	}
}

// 苍鸾怒击
export function clnj(fight_data, fight_unit) {
	fight_unit["苍鸾怒击"] = 2;
	let new_target_unit = G.FightUtils.get_ry_skill_target(fight_data, fight_unit);
	if (new_target_unit) {
		fight_unit["指令"]["目标"] = new_target_unit["编号"];
		// 普通攻击计算
		G.FightNormalAttackUtils.computing_normal_attack(fight_data, fight_unit, 1.1);
		// 添加状态
		G.FightStatusUtils.add_unit_status(fight_data, fight_unit, fight_unit, "苍鸾怒击", 11);
	}
}

/**
 * 取灵力伤害
 * @param {*} fight_data 
 * @param {*} src_unit 
 * @param {*} target_unit 
 * @returns 
 */
export function get_ll_damage(fight_data, src_unit, target_unit) {
	console.debug(`取灵力伤害 =>  src_unit ${src_unit["编号"]} target_unit ${target_unit["编号"]}`);
	let damage = src_unit["法伤"];
	let ap_defense = target_unit["法防"] || 0;

	// 攻击单位特殊状态对灵力伤害的影响
    for (const key in src_unit["特殊状态"]) {
        if (G.SkillData.default[key] && G.SkillData.default[key]["攻击灵力伤害"]) {
            console.debug(`攻击灵力伤害 ===>  特殊状态 ${key}`);
            G.SkillData.default[key]["攻击灵力伤害"](fight_data, src_unit, target_unit, damage);
        }
    }

	// 被攻击单位特殊状态对灵力伤害的影响
    for (const key in target_unit["特殊状态"]) {
        if (G.SkillData.default[key] && G.SkillData.default[key]["被攻击灵力伤害"]) {
            console.debug(`灵力伤害 ===>  特殊状态 ${key}`);
            G.SkillData.default[key]["被攻击灵力伤害"](fight_data, src_unit, target_unit, damage);
        }
    }

	// 攻击单位法术状态对灵力伤害的影响
    for (const key in src_unit["法术状态"]) {
        if (G.SkillData.default[key] && G.SkillData.default[key]["攻击灵力伤害"]) {
            console.debug(`攻击灵力伤害 ===>  法术状态 ${key}`);
            G.SkillData.default[key]["攻击灵力伤害"](fight_data, src_unit, target_unit, damage);
        }
    }

	// 被攻击单位特殊状态对灵力伤害的影响
    for (const key in target_unit["法术状态"]) {
        if (G.SkillData.default[key] && G.SkillData.default[key]["被攻击灵力伤害"]) {
            console.debug(`被攻击灵力伤害 ===>  法术状态 ${key}`);
            G.SkillData.default[key]["被攻击灵力伤害"](fight_data, src_unit, target_unit, damage);
        }
    }

	if (G.FightUnitUtils.check_fight_unit_jingmai(target_unit, "无底洞", "踏魄") && target_unit["法术状态"] && target_unit["法术状态"]["裂魂"]) {
		damage = damage * 0.94;
	}
	if (target_unit["法术状态"] && target_unit["法术状态"]["诸天看护"]) {
		damage += damage * (0.015 * (1 + target_unit["法术状态"]["诸天看护"]["层数"]));
	}
	if (src_unit["法术状态"]["风灵"]) {
		damage += 10 * src_unit["法术状态"]["风灵"]["层数"];
	}
	if (fight_data["回合"] <= 2 && src_unit["修业"] && src_unit["修业"]["五"] === "爆裂" && !fight_data["PK战斗"]) {
		damage = damage * 1.3;
	}
	if (fight_data["回合"] && target_unit["修业"] && target_unit["修业"]["五"] === "破伤" && !fight_data["PK战斗"]) {
		damage = damage * 0.5;
	}
	if (src_unit["爆裂触发"] && !fight_data["PK战斗"]) {
		damage = damage * 1.3;
		src_unit["爆裂触发"] = undefined;
	}

	if (src_unit["法术状态"]["苍灵雪羽"]) {
		damage = damage * (1 + src_unit["法术状态"]["苍灵雪羽"]["加伤"]);
	}
	if (target_unit["特殊状态"]["防御技能"] && target_unit["特殊状态"]["超级防御"] === undefined) {
		damage = damage * 0.9;
	}
	if (src_unit["魔之心"]) {
		damage = damage * src_unit["魔之心"];
	}
	if (src_unit["隔山打牛"] && G.RandomUtils.chance(20)) {
		damage += src_unit["隔山打牛"];
	}
	if (G.FightUnitUtils.check_unit_shen_qi_skill(src_unit,"沧浪赋") && target_unit["气血"] < target_unit["最大气血"] * 0.3) {
		damage += 120 * src_unit["神器"]["等级"];
	}

	if (target_unit["法术状态"] && target_unit["法术状态"]["碎甲符"] && target_unit["法术状态"]["碎甲符"]["减双抗"]) {
		ap_defense -= target_unit["法术状态"]["碎甲符"]["减双抗"];
	}

	if (target_unit["神佑复活"] && src_unit["弑神"]) {
		damage += src_unit["弑神"];
	} else if (src_unit["顺势"]) {
		if (target_unit["气血"] < target_unit["最大气血"] * 0.7) {
			damage += src_unit["顺势"][1];
		} else {
			damage -= src_unit["顺势"][2];
		}
	}
	if ((target_unit["类型"] === "bb" || target_unit["类型"] === "怪物") && src_unit["高山流水"]) {
		damage += src_unit["高山流水"];
	}

	if (!fight_data["PK战斗"]) {
		damage = damage * 1.2;
	}

	damage = damage * (1 + src_unit["法术修炼"] * 0.02) - ap_defense * (1 + target_unit["抗法修炼"] * 0.02) + (src_unit["法术修炼"] - target_unit["抗法修炼"]) * 5;

	// 玩家PK减伤
	if (fight_data["PK战斗"] && src_unit["类型"] === "玩家" && target_unit["类型"] === "玩家") {
		damage = Math.floor(damage * 0.85);
		if (damage < 200) {
			return Math.floor(damage * G.RandomUtils.generate_random(96, 104) / 100);
		} else {
			return Math.floor(damage * G.RandomUtils.generate_random(88, 98) / 100);
		}
	}
	damage = Math.floor(damage * G.RandomUtils.generate_random(96, 104) / 100);
	console.debug(`取灵力伤害 =>  damage ${damage}`);
	return damage;
}

/**
 * 取分灵系数
 * @param {*} sects_name 
 * @param {*} target_count 
 * @param {*} skill_level 
 * @returns 
 */
export function get_fl_ratio(sects_name, target_count, skill_level) {
	let data = 1 - target_count * 0.1;
	if (sects_name === "龙宫") {
		if (skill_level > 160) {
			if (data <= 0.57) {
				data = 0.57;
			}
		} else if (skill_level > 125) {
			if (data <= 0.55) {
				data = 0.55;
			}
		} else {
			if (data <= 0.5) {
				data = 0.5;
			}
		}
	} else {
		if (skill_level > 160) {
			if (data <= 0.6) {
				data = 0.6;
			}
		} else if (skill_level > 125) {
			if (data <= 0.57) {
				data = 0.57;
			}
		} else {
			if (data <= 0.5) {
				data = 0.5;
			}
		}
	}
	return data;
}